/**
 * @author xinjie.txt
 * @time: 2020年7月2日 上午12:04:43
 */
package com.jiepu.daily.corejava.day0702.sort;

import java.util.Arrays;

/**
 * @Description: a）选择排序: 在要排序的一组数中，选出最小的一个数与 第一个位置的数交换；
 *               然后在剩下的数当中再找最小的与第二个位置的数交换， 如此循环到倒数第二个数和最后一个数比较为止。 Selection.java
 * 
 * @author xinjie.txt
 */
public class Selection {

	/**
	 * @Description:
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] array = { 63, 45, 18, 89, 57, 93, 20, 35, 41, 76 };

		// 循环体
		// len 循环 len-1 次
		System.out.println("初始值：  ");
		PrintArray(array);
		System.out.println();
		System.out.println("排序过程：  \n");
		for (int i = 0, len = array.length; i < len - 1; i++) {
			// 寻找 array[max]
			int max = 0;
			for (int j = 0; j < len - i; j++) {
				if (array[max] < array[j]) {
					max = j;
				} // fi
			} // for j

			// 当前趟 最大值与最后一位 交换
			swap(array, max, array.length - i - 1);
			// 打印数组
			PrintArray(array);
		} // for i

		System.out.println("\n最终排序结果：  \n");
		PrintArray(array);
	}// main

	/**
	 *  
	 * @Description:交换元素位置
	 * @param array
	 * @param m
	 * @param n
	 */
	public static void swap(int[] array, int m, int n) {

		int len = array.length;
		if (m >= len || n >= len) {
			System.out.println("越界");
			return;
		}
		int temp = array[m];
		array[m] = array[n];
		array[n] = temp;

	}// swap

	/**
	 * 
	 * @Description: 打印数组
	 * @param array
	 */
	public static void PrintArray(int[] array) {
		System.out.println(Arrays.toString(array));

	}// PrintArray

}
